//给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
//你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
//你可以按任意顺序返回答案。

//提示：
//2 <= nums.length <= 104
//-109 <= nums[i] <= 109
//-109 <= target <= 109
//只会存在一个有效答案

#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

vector<int> input1 = {2, 7, 11, 15};
vector<int> input2 = {3, 3};

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        // init a hash table
        unordered_map<int, int> hashtable;
        for (int i=0; i<nums.size(); i++){
            int num_target = target - nums[i];
            if (hashtable.find(num_target) != hashtable.end())
                return vector<int>{i, hashtable.find(num_target)->second};
            else
                hashtable[nums[i]] = i;
        }
        return vector<int>{};
    }
};


int main() {
    Solution solution;
    auto indexs = solution.twoSum(input2, 6);
    for (auto item: indexs){
        cout<<item<<endl;
    }
}
